/**
 * @author 甜圆
 * @version v1.0.1
 * @date 2025/9/12 9:58
 * @package PACKAGE_NAME
 * @copyright 甜圆
 */

/**
 * 模拟产生死锁的代码
 */
class DeadLockDemo {
    // 定义静态资源1，用于线程同步
    private static Object resource1 = new Object();//资源 1
    // 定义静态资源2，用于线程同步
    private static Object resource2 = new Object();//资源 2


    // 程序入口方法
    public static void main(String[] args) {
        // 创建并启动线程1
        new Thread(() -> {
            // 获取resource1对象锁
            synchronized (resource1) {
                // 打印线程1获取到resource1的信息
                System.out.println(Thread.currentThread() + "get resource1");
                try {
                    // 线程休眠1000毫秒，模拟业务处理
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // 捕获并打印中断异常
                    e.printStackTrace();
                }
                // 打印线程1等待获取resource2的信息
                System.out.println(Thread.currentThread() + "waiting get resource2");
                // 尝试获取resource2对象锁
                synchronized (resource2) {
                    // 打印线程1获取到resource2的信息
                    System.out.println(Thread.currentThread() + "get resource2");
                }
            }
        }, "线程 1").start();

        // 创建并启动线程2
        new Thread(() -> {
            // 获取resource2对象锁
            synchronized (resource2) {
                // 打印线程2获取到resource2的信息
                System.out.println(Thread.currentThread() + "get resource2");
                try {
                    // 线程休眠1000毫秒，模拟业务处理
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // 捕获并打印中断异常
                    e.printStackTrace();
                }
                // 打印线程2等待获取resource1的信息
                System.out.println(Thread.currentThread() + "waiting get resource1");
                // 尝试获取resource1对象锁
                synchronized (resource1) {
                    // 打印线程2获取到resource1的信息
                    System.out.println(Thread.currentThread() + "get resource1");
                }
            }
        }, "线程 2").start();
    }
}
